EasyRSA-Readme v3.08 中文译本

Next:   [Contents]

EasyRSA-Readme v3.08 中文译本

Table of Contents


1 译者总注

李守中是开源软件理念坚定的支持者,所以译本虽不是软件,但依旧仿照开源软件的协议发布:

如果读者发现作品中有错误的地方,劳请来信指出。任何提高作品质量的建议李守中都将虚心接纳。

更多文章可于 李守中的主页 在线浏览。

原文档来源:

李守中在翻译 EasyRSA v3 系列文档的过程中发现,很多句子对于程序行为的描述有些模糊。

所以,李守中将不加提示地根据软件行为意译原文档中多数的句子;对于意译困难的句子,李守中会加入以 译者注 为开始标记的文本来帮助读者理解;对于意译之后依旧无法准确描述目标行为的句子,李守中将不加提示地扩充文档的内容。

此外,李守中还发现 Easy-RSA 文档原文与程序帮助页面 ( ./easyrsa -h ) 的内容有细微出入,但二者对于程序行为的描述基本相同。考虑到使用程序帮助页面的使用次数比翻阅文档的次数更多,所以,李守中在翻译本文档时将以帮助页面的信息为准,不会完全按照文档原文进行翻译。

有能力的读者可以从此链接 easyrsa_v3.08_doc.zip 下载英文原文与本文做对照。


2 (原文档开头部分)

这个文档描述了 Easy-RSA 3 和与它相关特性如何工作。

如果你正在找一个不包含很多背景知识和运行细节的教学文档的话, easy-rsa/doc 目录中可能提供了基于 Easy-RSA 的用法来向读者讲解的 How-toReadme 文档。 译者注: easyrsa3 并没有提供 How-to 文档,而 Readme 文档就是这个文档。老实往下读吧。


3 Easy-RSA 概览 ( Easy-RSA Overview )

Easy-RSA 是一个用于管理符合 X.509 标准的 PKI ( Public Key Infrastructure ) 的工具。PKI 由用户 ( 使用PKI的人或机构 ),认证机构 ( Certification Authority, CA) ( 颁发证书的人或机构 ),仓库 ( 保存证书的数据库,但证书通常被直接放在文件系统里 ) 组成。其中,认证机构 CA 进行这几种操作: 代用户生成密钥对 ( 当然可以由用户自己生成 ),验证注册公钥的用户的身份,生成并颁发证书,作废证书。另外,验证注册公钥的用户的身份这个操作可以由注册机构 ( Registration Authority, RA ) 来完成。使用 PKI 的其目在于创造、管理、分配、使用、存储以及撤销数字证书。 译者注: 作者对 PKI 是什么的解释有误,已修正。 关于 PKI 的更多信息可以看 EasyRSA Intro-To-PKI v3.08 中文译本 这部分。

EasyRSA 的代码可以运行在兼容 POSIX shell 的 shell 中,这样 EasyRSA 的代码可以在许多操作系统上运行。EasyRSA 的 Windows release 已经包含了运行 EasyRSA 所需的程序。EasyRSA 的代码缩减了它所依赖的外部程序的数量,所以加密相关的任务会使用 openssl 作为后端来完成。


4 亮点特性 ( Feature Highlight )

下面是 Easy-RSA 中值得介绍的部分特性:


5 获取并使用 Easy-RSA ( Obtaining and Using Easy-RSA )


5.1 下载并解压缩 ( 安装 ) ( Download and extraction ( installation ) )

Easy-RSA 程序由一个脚本文件与几个为脚本文件提供配置的文件组成。所以,只要下载 Easy-RSA Release 压缩包 ( .tar.gz 格式的压缩包是给 Linux/Unix 用的,.zip 格式的压缩包是给 Windows 用的 ) 并解压就完成了安装。不需要其他操作。

用户应该以非 root 用户来安装和运行 Easy-RSA,因为这个程序不需要 root 权限。


5.2 运行 Easy-RSA ( Running Easy-RSA )

用户可以在自己喜欢的 shell 中调用 Easy-RSA。在 Windows 下,用户需要在命令行执行 EasyRSA-Start.bat 脚本来启动一个 POSIX-shell,然后再在这个 shell 中使用 Easy-RSA 脚本程序。

EasyRSA 命令的语法格式长这样:

./easyrsa [options] COMMAND [command-options]

COMMAND 是要运行的功能, command-options 是配置这个功能的选项。有些命令有必选项和可选项。 ./ 指明了 easyrsa 脚本文件的路径,是类 Unix 系统的写法,Windows 用户请自行在 MS 的文档中找路径的写法。

下面两条命令有一样的效果,都可以查看 easyrsa 脚本运行选项的用法:

./easyrsa -h options
./easyrsa help options

下面两条命令有一样的效果,都可以查看某个功能的用法:

./easyrsa -h [COMMAND]
./easyrsa help [COMMAND]

下面三条命令有一样的效果,都可以查看 EasyRSA 有哪些功能 ( COMMAND ):

./easyrsa
./easyrsa -h
./easyrsa help

6 配置 Easy-RSA ( Configuring Easy-RSA )

EasyRSA 3 不需要任何的配置文件就可以直接运行,而 v2 和 v1 还需要做一些配置才能运行。然而 vars.example 文件包含了许多带注释的选项,这些选项用于配置 EasyRSA 3 如何运行。阅读这个文件可以知道用户可以配置哪些东西。但是要注意,用户自定义的配置只有被写在名为 vars 文件中才能被正常读取。

译者注: 关于这个 vars 文件应该放在哪,怎么在运行的时候指定 vars 文件;有哪些环境变量可以配置;怎么自定义 X.509 标准的证书扩展。请看 EasyRSA-Advanced v3.08 中文译本 这篇。


7 起步: 基础部分 ( Getting Started: The Basics )

这里使用的一些术语对于熟悉 PKI 如何工作的人来说很简单。如果用户不熟悉 PKI,那么读完 EasyRSA Intro-To-PKI v3.08 中文译本 之后会对 PKI 的工作流程有一个基本的概念,就可以继续往下读这篇文档了。


7.1 创建 Easy-RSA PKI ( Creating an Easy-RSA PKI )

在所有操作之前,Easy-RSA 要先初始化一个 PKI 目录。一个 Easy-RSA 程序可以管理多个 PKI,但不同的 PKI 目录需要有不同的名称,默认的 PKI 的目录名为 pki

创建一个新的 PKI,重新初始化一个 PKI ( 删除旧 PKI 的数据,创建一个新的 PKI ) 都可以用下面的命令完成:

./easyrsa init-pki

在 PKI 被创建并被初始化之后,就可以用它来建立一个新的 CA 并生成密钥对了。


7.2 PKI 目录结构 ( The PKI Directory Structure )

Easy-RSA 生成的 pki 目录包含如下内容:

  • private/ 存储了在这台机器上生成的私钥文件。
  • reqs/ 包含了生成的证书签名请求 ( certificate sign requests ) 文件。从外部导入的证书签名请求也放在这里。

在刚被初始化的 pki 目录中,以上两个子目录不包含任何内容。后续调用 Easy-RSA 脚本才会根据用户指定的操作,在这两个目录下生成必要的文件。

在构建 CA 时,Easy-RSA 和 ( 被 Easy-RSA 调用的 ) openssl 会创建许多新文件。重要的文件有:

  • ca.crt CA 的证书。
  • index.txt 是所有已颁发的证书的主数据库。
  • serial 存储了下一个被签发的证书的序列号。( 序列号用于在主数据库中,作为已签发的证书文件的唯一标识 )
  • private/ca.key CA 的私钥。( 不可泄漏 )
  • certs_by_serial/ 存储了所有签发的证书,证书文件的文件名为从数据库中查到的序列号。
  • issued 存储了所有签发的证书,证书文件的文件名为名为证书的 Subject: CommonName 字段的字符值。( 用 cat 看一下证书内容就能找到这个字段,很明显 )

7.3 在创建 PKI 之后 ( After Creating a PKI )

一旦用户创建了 pki,下一步操作就是创建一个 CA 或者生成一对密钥。下面的章节讲了这两个操作如何进行。


8 Easy-RSA 作为 CA 的用法 ( Using Easy-RSA as a CA )


8.1 构建 CA ( Building the CA )

为了给证书签名请求文件 ( Certificate Signing Request, CSR 文件 ) 签名,用户需要一个 CA。 译者注: Easy-RSA 生成的 CSR 文件以 .req 结尾。 为了在新建的 PKI 中创建新的 CA,用户需要执行:

./easyrsa build-ca

要用一个足够复杂的密码来保护 CA 的私钥。请注意,要记住这个密码,因为后续会经常用到。比如给 CSR 文件签名的时候。

在创建 CA 的过程中,你也需要为 CA 选择一个 Common Name ( CN )。这个 CN 只是为了展示使用,用户可以选一个自己喜欢的。


8.2 将证书签名请求文件导入到 CA 中 ( Importing requests to the CA )

在创建 CA 之后,就可以使用 PKI 从外部系统导入需要这个这个 CA 签名的 CSR 文件。为了给这个 CSR 文件签名,首先要确保这个文件被导入到 PKI 中,这样 Easy-RSA 才能知道这个文件的存在。这个 CSR 文件必须符合 PKCS 10 格式。

无论要导入的文件名是什么,Easy-RSA 都会使用导入这个 CSR 文件时定义的 短名称 来引用此请求文件。 译者注: 实际上就是,在导入 CSR 文件的时候,给这个文件指定一个新的文件名,Easy-RSA 会把要导入的 CSR 文件复制到 pki/reqs 目录下,然后用新的文件名重命名这个文件。这样 Easy-RSA 就能通过新文件名在 pki/reqs 目录下找到这个 CSR 文件。 导入的工作方式如下:

./easyrsa import-req /path/to/<file_name>.req <name_of_request>

虽然 <name_of_request> 这个字段的值可以随便写,但它的值应该让创建这个 CSR 文件的人或系统来定。 译者注: 这个字段的值最后会进入主数据库,所以还是不要随便写比较好。


8.3 给请求文件签名 ( signing a request )

Easy-RSA 导入请求后,即可对其进行审查和签名。每个证书都需要一个"类型",它控制证书的扩展,Easy-RSA 提供了 3 种可能的类型: server, clientca ,如下所述:

  • client: 作为 TLS 加密通信中的客户端,适用于 VPN 用户或 web 浏览器 ( web 客户端 )。
  • server: 作为 TLS 加密通信中的服务器,适用于 VPN 或 web 服务器。
  • ca: 一种中间 CA,用于将多个 CA 链接在一起。
./easyrsa sign-req <type> <name_of_request>

可根据需要定义其他类型的证书。更详细信息,请参阅高级文档。


8.4 吊销证书并发布 CLRs ( Revoking and publishing CRLs )

吊销证书的操作可以用以下命令完成:

./easyrsa revoke <name_of_request>

要生成适合发布到使用它的系统的 CRL 用以下命令完成:

./easyrsa gen-crl

命令执行之后会生成 pki/crl.pem 文件,它描述了哪些证书被吊销了。必须要将该文件发布到使用证书文件的服务器中,否则证书仍然有效。


9 用 Easy-RSA 来生产密钥对和证书签发请求 ( Using Easy-RSA to generate keypairs & requests )

Easy-RSA 可以生成 PKCS 10 格式的私钥文件与证书请求文件。CA 需要证书请求文件来生成证书。

理想情况下,用户不应该在用于 CA 的 PKI 中为客户端或服务器生成密钥对文件。最好将此过程分离,并且只在将要使用密钥对的机器上生成私钥与证书请求文件。 译者注: 因为从 CA 传输私钥文件和证书文件到目标机器要多一个文件传输的过程,而这个过程中有泄露私钥的风险。如果只在需要使用密钥的机器上生成私钥和证书请求文件,那么私钥只在存储在本机上,没有多余步骤,泄露风险小了不少。

Easy-RSA 可以用以下命令生成一对密钥:

./easyrsa gen-req <name_of_request>

然后,用户有机会修改证书请求 ( CSR ) 的 Subject 信息。Easy-RSA 默认使用命令行中提供的短名称,但如有必要,用户可以自由更改。提供密码和 Subject 信息后,将显示私钥文件和证书请求文件的路径。

为了获得已签名的证书,必须将请求 ( CSR ) 文件发送给 CA 进行签名。如果单个 PKI 不但要作为 CA,还要作为生成私钥文件和 CSR 文件的地方,则显然不需要此步骤,因为上一步生成的 CSR 就在 PKI 中 ( 已被导入 )。